package cn.ratopia.system.exception;

import lombok.Getter;
import org.apache.commons.lang3.StringUtils;

import java.io.Serial;

@Getter
public class BaseException extends RuntimeException {
    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 所属模块
     */
    private final String module;

    /**
     * 错误码
     */
    private final String code;

    /**
     * 错误消息
     */
    private final String defaultMessage;

    public BaseException(String module, String code, String defaultMessage) {
        this.module = module;
        this.code = code;
        this.defaultMessage = defaultMessage;
    }

    public BaseException(String code, String defaultMessage) {
        this(null, code, defaultMessage);
    }

    public BaseException(String defaultMessage) {
        this(null, null, defaultMessage);
    }

    @Override
    public String getMessage() {
        StringBuilder sb = new StringBuilder();
        // 必须有 defaultMessage，否则 fallback 提示
        sb.append(StringUtils.defaultIfEmpty(defaultMessage, "[WARN: NO_ERROR_MESSAGE_SET]"));

        // 可选字段拼接（非空时才加）
        if (StringUtils.isNotBlank(code)) {
            sb.append(" - code=").append(code);
        }
        if (StringUtils.isNotBlank(module)) {
            sb.append(" - module=").append(module);
        }
        return sb.toString();
    }


}
